Subject: DLSw Capaabilities Exchange Format Proposal

From: [email-masked]
Date: Tue, 08 Feb 94 13:08:02 PST

Attached below is my proposal for the format of the Capabilities
Exchange between two DLSw standard compliant devices.

There are still a couple of gaps in the format specification:
    (1) GDS Id assignments
    (2) Key assignments for structured subfields

I've assigned them what I think are reasonable values awaiting a
verdict from  IBM.  IBM DLSw reps are working with the IBM architecture
group to come up with assignments.  (Hopefully the patent on GDS
Variables won't get in the way!)

I tried to capture the direction of the other SIGlets that affected
Capabilities Exchange (especially Flow Control).  There hasn't really
been any convergence yet, but I've written them down anyway.  I'm sure
the results of next week's AIW will affect the format of the
Capabilities Exchange.  C'est la vie.

Please look this over and comment on the overall structure of the format.
Alternatives on the format as I see it are:
    (a) a single GDS Variable with individual variables in structured
	subfields,
    (b) multiple GDS Variables logically grouped together, each with 
	individual variables in structured subfields,
    (c) individual variables in their own GDS Variables with possibly
	no structured subfields.

Alternative (a) is the one I've chosen in this proposal since that is
roughly what both the APPC GDS Variables (e.g. CNOS Request/Reply) and
APPN GDS Variables (e.g. CP Capabilities Exchange) do.  The difference
here is that structured subfields are used to contain actual values as
opposed to location-dependent fields like is used in CNOS and CP
Capabilities Exchange.  This will give us greater flexibility to grow
the DLSw Capabilities Exchange over time.

Alternative (b) would enable us to logically group like elements
together.  For example, all required variables could be in a GDS
Variable; all pacing-related variables could be in another GDS
Variable; all NetBIOS-related variables could be in yet another; and so
on.  Not sure if this level of detail is worth the effort.

Alternative (c) is just another way of representing variables as in
alternative (a) but with GDS Ids rather than LT key values.  We have
small variables and the overhead imposed by GDS Variables doesn't seem
worth it.

I don't think that nested GDS Variables like those in SNA/DS and DIA is
the way to go either.  They impose a lot of overhead (per above
argument) and parsing them is a pain unless you use yacc.  I've left
that alternative out completely.

Also, note that the structured subfields are all type LT (i.e. there
are no KL subfields).

I also think it is appropriate to establish a rule to enable backward
compatibility of Capabilities Exchange:

    If an implementation of DLSw doesn't recognize a particular
    control vector, it is merely ignored.

Please review and we'll discuss this next week along with IBM's
TCP connection proposal.

Regards,
-----------
Wayne Clark
cisco Systems, Inc.
[email-masked]
415/688-4627

P.S. I won't have much time to do edits to this proposal based upon
     feedback prior to the AIW ... I have to get the edits to the SDLC
     MIB done this week.

*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*

			    Proposal for the Format of

			    DLSw Capabilities Exchange

				     Wayne Clark
			        cisco Systems, Inc.

The Data Link Switching Capabilities Exchange is formatted as a single
General Data Stream (GDS) Variable with multiple type "LT" structured
subfields.  

The DLSw Capabilities Exchange looks like:

    +----+----+-----------------+
    | LL | ID | Control Vectors |
    +----+----+-----------------+

    0-1		Length, in binary, of the DLSw Capabilities Exchange GDS
		Variable.  The value of LL is the sum of the length of
		all fields in the GDS Variable (i.e. length of LL + 
		length of ID + length of Control Vectors).

    2-3		GDS Id: X'F000'

    4-n		Control Vectors consisting of type LT structured subfields
		(i.e. the DLSw Capabilities Exchange Structured Subfields)

		Type LT structured subfields consist of a 1-byte length
		field (the "L"), a 1-byte type field (the "T") and n-bytes
		of data.  The length field defines the length of the
		structured subfield which, by definition, consists of the
		type field and data or n + 1.  This imposes a length
		restriction of 254 bytes on all data contained in a
		structured subfield.

    DLSw Capabilities Exchange Structured Subfields

        +---------------------------------------------------------------+
        |   Vendor Id (X'01') Control Vector                            |
        |                                                               |
        |       The Vendor Id control vector identifies the             |
        |       manufacturer of the Data Link Switch sending the DLSw   |
        |       Capabilities Exchange.  This control vector is          |
        |       required.                                               |
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'04'       Length of the Vendor Id structured
				    subfield
	   1       1    X'01'       key = X'01' that identifies this as the
				    Vendor Id structured subfield
	  2-5      3                the 3-byte Organizationally Unique
				    Identifier (OUI) for the vendor

        +---------------------------------------------------------------+
        |   Version String (X'02') Control Vector                       |
        |                                                               |
        |       The Version String control vector identifies the	|
        |       particular version number of the sending Data Link	|
        |       Switch.  The format of the actual verion string is	|
        |       vendor-defined.  This control vector is optional.	|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1   X'n-1'       Length of the Version String structured
				    subfield
	   1       1    X'02'       key = X'02' that identifies this as the
				    Version String structured subfield
	  2-n     n-2               the string that identifies the software
				    version for the sending DLSw.

        +---------------------------------------------------------------+
        |   NetBIOS Support (X'03') Control Vector                      |
        |                                                               |
	|	The NetBIOS Support control vector identifies support	|
	|	for the NetBIOS protocol by the sending Data Link	|
	|	Switch.  This control vector is optional.  If it is	|
	|	ommitted in a DLSw Capabilities Exchange, then no	|
	|	NetBIOS support is assumed.				|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'02'       Length of the NetBIOS Support structured
				    subfield
	   1       1    X'03'       key = X'03' that identifies this as the
				    NetBIOS Support structured subfield
	   2       1                an indicator of the support for NetBIOS
				    by the Data Link Switch.
				    X'00'	NetBIOS is not supported by
						the sender
				    X'01'	NetBIOS is supported by the
						sender

        +---------------------------------------------------------------+
        |   Loop Prevention Support (X'04') Control Vector              |
        |                                                               |
	|	The Loop Prevention Support control vector identifies	|
	|	support for the loop prevention algorithm as specified	|
	|	in the Data Link Switching specification.  This control	|
	|	vector is optional.  If it is ommitted in a DLSw	|
	|	Capabilities Exchange, then no Loop Prevention support	|
	|	is assumed.						|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'02'       Length of the Loop Prevention Support
				    structured subfield
	   1       1    X'04'       key = X'04' that identifies this as the
				    Loop Prevention Support structured subfield
	   2       1                an indicator of the support for Loop 
				    Prevention by the Data Link Switch.
				    X'00'	Loop Prevention is not
						supported by the sender
				    X'01'	Loop Prevention is supported
						by the sender

        +---------------------------------------------------------------+
        |   Flow Control Support (X'05') Control Vector                 |
        |                                                               |
	|	The Flow Control Support control vector identifies the	|
	|	level of support for flow control for the sending Data	|
	|	Link Switch.  This control vector is optional.  If it	|
	|	is ommitted in a DLSw Capabilities Exchange, then no  	|
	|	flow control support is provided by the sender.		|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'03'       Length of the Flow Control Support
				    structured subfield
	   1       1    X'05'       key = X'05' that identifies this as the
				    Flow Control Support structured subfield
	   2       1                an indicator of the different flow control
				    techniques implemented by the sender.
				    Bit	   Contents
				    ---	   --------
				     0	   indicator for support of XON / XOFF
					   flow control
					   0	XON / XOFF flow control is not
						supported. 
					   1	XON / XOFF flow control is
						supported. 
				     1	   indicator for support of fixed
					   window pacing
					   0	fixed window pacing is not
						supported
					   1	fixed window pacing is
						supported
				     2	   indicator for support of variable
					   window pacing
					   0	variable window pacing is not
						supported
					   1	variable window pacing is
						supported
	   3       1                an indicator of  which flow control
				    technique is in effect by the sender.
				    X'80'	XON / XOFF flow control is
						in effect.
				    X'40'	fixed window pacing flow 
						control is in effect.  If this
						value is specified, the
						Initial Pacing Window control
						vector must be specified.
				    X'20'	variable window pacing flow 
						control is in effect.
				    X'00'	no flow control is in effect

        +---------------------------------------------------------------+
        |   Initial Pacing Window (X'06') Control Vector                |
        |                                                               |
	|	The Initial Pacing Window control vector specifies the	|
	|	pacing window size for either fixed window or variable	|
	|	window pacing schemes.  For fixed window pacing, this	|
	|	value is the window size for the life of the TCP	|
	|	connection.  For variable window pacing, this value is	|
	|	the initial window size.  This control vector is	|
	|	required if the Flow Control Support control vector	|
	|	indicates either fixed or variable window pacing is in	|
	|	effect.							|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'03'       Length of the Initial Pacing Window
				    structured subfield
	   1       1    X'06'       key = X'06' that identifies this as the
				    Initial Pacing Window structured subfield
	  2-3      2                the pacing window size.

        +---------------------------------------------------------------+
        |   MAC Address Mask (X'07') Control Vector                     |
        |                                                               |
        |       The MAC Address Mask control vector specifies the mask	|
        |       to use for identifying ranges of MAC addresses that are	|
        |       accessible by the sending Data Link Switch.  This	|
        |       control vector is used in conjuction with the MAC	|
        |       Address Value Control Vector to identify this  range of	|
        |       accessible MAC addresses.				|
        |                                                               |
        |       Note: If a particular MAC address, <mac-addr>,		|
        |             satisfies the following algorithm, then		|
        |             <mac-addr> is assumed to be accessible via the	|
        |             sending Data Link Switch.				|
        |                                                               |
        |             <mac-addr> & <mac-addr-mask> == <mac-addr-value>	|
        |                                                               |
        |                 where:  <mac-addr-mask>  is specific in this	|
        |                                          control vector, and	|
        |                         <mac-addr-value> is specified in the	|
        |                                          MAC Address Value	|
        |                                          control vector.	|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'07'       Length of the MAC Address Mask
				    structured subfield
	   1       1    X'07'       key = X'07' that identifies this as the
				    MAC Address Mask structured subfield
	  2-7      2                the 6-byte MAC address mask

        +---------------------------------------------------------------+
        |   MAC Address Value (X'08') Control Vector                    |
        |                                                               |
        |       The MAC Address Value control vector specifies the	|
        |       value to use for identifying ranges of MAC addresses	|
        |       that are accessible by the sending Data Link Switch.	|
        |       This control vector is used in conjuction with the MAC	|
        |       Address Mask Control Vector to identify this range of	|
        |       accessible MAC addresses.				|
        |                                                               |
        |       See MAC Address Mask Control Vector for an		|
        |       explanation.						|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'07'       Length of the MAC Address Value
				    structured subfield
	   1       1    X'08'       key = X'08' that identifies this as the
				    MAC Address Value structured subfield
	  2-7      2                the 6-byte MAC address value

        +---------------------------------------------------------------+
        |   MAC Address List (X'09') Control Vector                     |
        |                                                               |
        |       The MAC Address List control vector specifies a list of	|
        |       MAC addresses that are accessible by the sending Data	|
        |       Link Switch.  Because of the limitations of the		|
        |       single-byte length field, a maximum of 42 MAC addresses	|
        |       can be defined.						|
        |                                                               |
        |       This control vector can be used in conjunction with the	|
        |       MAC Address Mask / MAC Address Value control vectors.	|
        |                                                               |
        +---------------------------------------------------------------+

	Offset  Length  Value       Contents
	------  ------  -----       --------
	   0       1    X'n-1'      Length of the MAC Address List
				    structured subfield
	   1       1    X'09'       key = X'09' that identifies this as the
				    MAC Address List structured subfield
	  2-n     n-2               the list of 6-byte MAC addresses. A
				    maximum of 42 contiguous MAC addresses
				    can be specified.

---

From: Choon Lee <[email-masked]>
Date: Thu, 10 Feb 1994 09:31:40 -0800

Wayne,

my comments and questions:

o why is LT used over KL, is it parsing efficiency?

o genaral typo error: interspersed below.

o MAC Address Mask (x'07') and MAC Address Value (x'08') control vectors.
  How are they represented in the event of multiple sets? 
  I guess it's '07''08''07''08' ... as opposed to '07''07'... '08''08'... ?
  Anyway, these 2 vectors look like a prime candidate for the alternative (b),
  logically grouped GDS variable?

Regards,
Choon Lee

>> From [email-masked] Tue Feb  8 13:49:04 1994
>> To: [email-masked]
>> Subject: DLSw Capaabilities Exchange Format Proposal
>> Date: Tue, 08 Feb 94 13:08:02 PST
>> From: [email-masked]
>> Content-Length: 16793
>> 
          ^^^
          2-4
          ^^^
          2-(n-1)

                   ^
                   6

                   ^
                   6

          ^^^
          2-(n-1)